package word.attribute;

import org.json.simple.JSONObject;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * 반의어 속성
 */
public class AntonymsAttribute implements AdditionalAttribute
{
	static
	{
		AttributeList.addAttribute(new AntonymsAttribute(null));
	}

	private String antonyms; // 반의어 단어들

	private static final Font antonymsFont = new Font("맑은 고딕", Font.PLAIN, 12); // 출력될 폰트 설정

	/**
	 * 생성자
	 * @param antonyms
	 */
	public AntonymsAttribute(String antonyms)
	{
		this.antonyms = antonyms;
	}

	@Override
	public JPanel toPanel()
	{
		JPanel panel = new JPanel();

		// add()할 때마다 한 줄씩 배치되도록 레이아웃 설정.
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		panel.setOpaque(false);

		// 반의어 라벨
		JLabel antonymsLabel = new JLabel("[반의어] " + antonyms);
		antonymsLabel.setFont(antonymsFont);

		// 반의어 추가
		panel.add(antonymsLabel);

		return panel;
	}

	@Override
	public AdditionalAttribute createAttributeByDialog(JFrame owner)
	{
		JDialog dialog = new JDialog(owner, getName() + " 추가", true)
		{
			{
				setSize(230, 130);
				setLayout(null);
				setLocationRelativeTo(null);
				setResizable(false);

				// 반의어 라벨
				final JLabel txt_antonyms = new JLabel("[반의어] ");
				txt_antonyms.setBounds(15, 20, 100, 25);
				add(txt_antonyms);

				// 반의어 입력 필드
				final JTextField edit_antonyms = new JTextField();
				edit_antonyms.setBounds(70, 20, 140, 25);
				add(edit_antonyms);


				// 확인버튼 추가
				JButton btn_ok = new JButton("확인");
				btn_ok.setBounds(27, 60, 80, 25);
				btn_ok.addActionListener(new ActionListener()
				{
					/**
					 * 확인버튼 눌렀을 때 호출되는 메서드
					 * @param e
					 */
					@Override
					public void actionPerformed(ActionEvent e)
					{
						antonyms = edit_antonyms.getText();
						dispose();
					}
				});
				add(btn_ok);

				// 취소버튼 추가
				JButton btn_cancel = new JButton("취소");
				btn_cancel.setBounds(117, 60, 80, 25);
				btn_cancel.addActionListener(new ActionListener()
				{
					/**
					 * 취소버튼 눌렀을 때 호출되는 메서드
					 * @param e
					 */
					@Override
					public void actionPerformed(ActionEvent e)
					{
						antonyms = null;
						dispose();
					}
				});
				add(btn_cancel);


			}
		};

		// 확인 버튼 눌렀으면
		dialog.setVisible(true);

		if (antonyms != null)
			return new AntonymsAttribute(antonyms);
		else
			return null;
	}

	@Override
	public JSONObject toJsonObject()
	{
		JSONObject object = new JSONObject();
		object.put("antonyms", antonyms);

		return object;
	}

	@Override
	public AdditionalAttribute createAttributeByJSON(JSONObject object)
	{
		String antonyms = (String) object.get("antonyms");

		if (antonyms != null)
			return new AntonymsAttribute(antonyms);

		else
			return null;
	}

	@Override
	public String getName()
	{
		return "[반의어]";
	}
}